package com.learning.mybatis.mapper.select.mapper;

import com.learning.mybatis.mapper.select.entity.User;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

/**
 * ClassName: IUserMapping
 * Description:
 * Date: 2020/7/22 9:56 【需求编号】
 *
 * @author Sam Sho
 * @version V1.0.0
 */
@Repository
public interface IUserMapper {


    /**
     * 1. 查询
     *
     * @param id
     * @return
     */
    int count(int id);

    /**
     * 2. 查询。自动映射。
     * autoMappingBehavior = PARTIAL（默认）
     *
     * @param id
     * @return
     */
    User find(int id);


    /**
     * 3. 多个参数，使用注解的方式 @Param 传递参数
     * 不要使用 Map 传输。
     * 【实践】：3~5个，直接参数传，大于5个使用 JavaBean
     *
     * @param name
     * @param age
     * @return
     */
    User findByName(@Param("name") String name, @Param("age") int age);


    /**
     * 使用 JavaBean 传输参数
     * 使用 @Param 注解，name获取参数时需要 #{user.id}
     *
     * @param user
     * @return
     */
    User findByJavaBean(@Param("user") User user);


    /**
     * 查询最佳实践 1：单/多个参数传输，加上注解 @Param
     *
     * @param id
     * @return
     */
    User selectByParam(@Param("id") int id);

    /**
     * 查询最佳实践 2：直接使用JavaBean传输参数
     *
     * @param user
     * @return
     */
    User selectByJavaBean(User user);


    /**
     * 使用 ResultMap 映射结果集
     *
     * @param id
     * @return
     */
    User selectToResultMap(@Param("id") int id);


}
